0 REM" P.J.PONZO*83*WATERLOO/ONTARIO 1 [143]" 1000 GOSUB60000:PRINTCHR$(142):PRINT"[147] GRAPHICS-3" 1001 PRINT"[176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]" 1002 PRINT"[221]  MORE C64 GRAPHICS [146] [221]":MS$="PONZOTUTOR" 1003 PRINT"[173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189][144]":GOSUB63100:MS$=" WELCOME!" 1004 GOSUB63100:GOSUB63000:PRINT"[147][144]"; 1010 GOSUB7001 1020 GOSUB7600 1030 PRINTDN$"LET'S REVIEW..":GOSUB63000 1040 PRINTDN$"LET'S CALL BMM[146]=B[146]IT M[146]AP M[146]ODE BIT" 1050 A$=BM$:B$="[214]":GOSUB7100:GOSUB63000 1060 PRINTDN$"& MCM[146]=M[146]ULTI C[146]OLOUR M[146]ODE BIT" 1070 A$=MC$:B$="[214]":GOSUB7100:GOSUB63000 1080 PRINTDN$"SMB[146]=S[146]CREEN M[146]EMORY B[146]ASE" 1090 A$=SM$:B$="[214][214][214][214]":GOSUB7100:GOSUB63000 1100 PRINTDN$"CMB[146]=C[146]HARACTER M[146]EMORY B[146]ASE" 1110 A$=CM$:B$="[214][214][214][146]1":GOSUB7100:GOSUB63000 1120 PRINTDN$"ASSUME BMM[146]=0:MCM[146]=0 " 1130 A$=BMM$:B$="0":GOSUB7100 1140 A$=MCM$:B$="0":GOSUB7100:GOSUB63000:GOSUB7603 1145 PRINTDN$"..AND SCREEN MEMORY[146] STARTS AT 1024" 1150 A$=SMB$:B$="0001":GOSUB7100:GOSUB63000 1155 PRINTDN$"..AND CHARACTER[160]MEMORY[146] AT 53248" 1160 A$=CMB$:B$="010":GOSUB7100:GOSUB63000 1165 PRINTDN$"(PEEK(V+24)=21...NORMALLY)":GOSUB63000 1170 PRINTDN$"NOW POKE1025,2[146]":GOSUB63000 1180 PRINTDN$"SCREEN MEMORY LOC'N 1025 HAS '2'" 1190 A$=SC$:B$="00000010":GOSUB7100:GOSUB63000 1200 PRINTDN$"WHAT'S ON THE SCREEN AT LOC'N 1025?":GOSUB63000 1210 PRINTDN$"1[146] EXTRACT THE CONTENTS OF LOC'N 1025":GOSUB63000 1220 PRINTDN$"...THE NUMBER '2'.":GOSUB63000 1230 PRINTDN$"2[146] GET 'PIXEL PATTERN' #2 FROM CH'R MEM'Y[146]":GOSUB63000 1240 PRINTDN$"'PATTERNS' COME IN GROUPS OF 8 BYTES.":GOSUB63000 1250 PRINTDN$"PATTERN #2 COMES FROM 'GROUP #2'.":GOSUB63000 1260 PRINTDN$"'GROUP #0' IS FROM BASE[146] TO BASE[146]+7":GOSUB63000 1270 PRINTDN$"'GROUP #1' IS FROM BASE[146]+8 TO BASE[146]+15":GOSUB63000 1280 PRINTDN$"'GROUP #2' IS FROM BASE[146]+16 TO BASE[146]+23":GOSUB63000 1290 A$=CH$:B$="BASE[146]+16":GOSUB7100 1300 A$=CH$+"[145][145][145]":B$="BASE[146]+17":GOSUB7100 1310 A$=CH$+"[145][145][145][145][145][145]":B$="BASE[146]+18":GOSUB7100 1320 A$=CH$+"[145][145][145][145][145][145][145][145][145]":B$="BASE[146]+23":GOSUB7100 1330 PRINTDN$"THESE 8[146] BYTES DETERMINE 64[146] PIXELS.":GOSUB63000 1340 PRINTDN$"FOR 'NORMAL' CHARACTER MEMORY..":GOSUB63000 1350 PRINTDN$"'GROUP #2' GIVES THE LETTER 'B'.":GOSUB63000 1360 PRINTDN$"..AND A COLOURED 'B' APPEARS ON SCREEN!":GOSUB63000 1370 PRINTDN$"WHAT COLOURS??":GOSUB63000 1380 PRINTDN$"3[146] GO TO COLOUR MEMORY[146](55296)" 1390 PRINTCH$"[157][157] COLOUR MEMORY^ " 1395 B$="[157] [221] [221][145][157][157][157][157][157][157][157][157][157][157][157] [157][157][157][157][157][157][157][157] " 1400 A$=CH$:PRINTA$B$ 1410 A$=CH$+"[145][145][145]":PRINTA$B$ 1420 A$=CH$+"[145][145][145][145][145][145]":PRINTA$B$ 1430 A$=CH$+"[145][145][145][145][145][145][145][145][145]":PRINTA$" ":GOSUB63000 1435 PRINTDN$"JUST NYBBLES..REMEMBER?":GOSUB63000 1440 PRINTDN$"THE SCREEN MEMORY[146] LOC'N IS 1024+1[146]" 1445 A$=SC$:B$="00000010":GOSUB7100:GOSUB63000 1450 PRINTDN$"SO GO TO COLOUR MEMORY[146] LOC'N 55296+1[146]":GOSUB63000 1460 A$=CH$+"[145][145][145][157][157][157][192][192][192][192][192][192][192][192][192]>":B$="1101":GOSUB7100:GOSUB63000 1470 PRINTDN$"THIS MAY HAVE '13'=LIGHT GREEN.":GOSUB63000 1480 PRINTDN$"SO ON[146] PIXELS ARE 'LIGHT GREEN'":GOSUB63000 1490 PRINTDN$"AND OFF[146] PIXELS ARE ????":GOSUB63000 1500 PRINTDN$"BACKGROUND COLOUR[146]!":GOSUB63000 1510 PRINT"[147]";:GOSUB7001:PRINTDN$"SUPPOSE BMM[146]=1:MCM[146]=0" 1520 A$=BMM$:B$="1":GOSUB7100 1530 A$=MCM$:B$="0":PRINTA$B$ 1535 GOSUB63000:PRINTDN$"WE'RE IN NORMAL B[146]IT M[146]AP M[146]ODE" 1540 GOSUB63000:GOSUB7606:PRINTDN$"..AND THE SCREEN GOES BANANAS!":GOSUB63000 1550 V=53248:POKEV+17,PEEK(V+17)OR32:FORT=1TO1000:NEXT:POKEV+17,27 1560 PRINTDN$"SEE?":GOSUB63000 1570 PRINTDN$"THE SCREEN WAS FILLED WITH ???":GOSUB63000 1580 PRINTDN$"CHARACTER MEMORY[146]!":GOSUB63000 1590 PRINTDN$"8K BYTES STARTING AT CH'R MEM'Y BASE[146]":GOSUB63000 1600 PRINTDN$"WERE USED TO TURN PIXELS ON[146]/OFF[146]!":GOSUB63000 1610 PRINTDN$"WANT TO SEE THE 'CHARACTERS'?":GOSUB63000 1620 PRINTDN$"I'LL CLEAR THE SCREEN..AND SET BMM[146]=1":GOSUB63000 1630 PRINTDN$"HIT A KEY TO GO TO 'NORMAL'..":GOSUB63000 1640 PRINT"[147]":GOSUB7200 1650 MS$="BANANAS!!!":GOSUB63100 1660 PRINT"[147]THE 'COLOURS' OF THE PIXELS WERE" 1670 PRINT"FROM THE 1000 BYTES OF SCREEN MEMORY[146]." 1680 PRINT"A 'CLEAR' SCREEN MEANS SCREEN MEMORY[146]" 1690 PRINT"CONTAINS '32' EVERYWHERE (32=SPACE)." 1700 PRINT"AND, IN BINARY, 32=0010[146] 0000[146]" 1705 PRINT"(ON[146] PIXEL COLOUR-OFF[146] PIXEL COLOUR)" 1710 PRINT"SO THE ON[146] PIXELS WERE COLOUR #2" 1720 PRINT"(0010='2') AND THE OFF[146][146] PIXELS WERE" 1730 PRINT"COLOUR #0 (0000='0')." 1740 PRINT"THAT GIVES 'RED CHARACTERS' AND" 1750 PRINT"'BLACK BACKGROUND'!":GOSUB63000 1760 PRINT"[147]IF WE WANTED BLUE BACKGROUND AND" 1770 PRINT"WHITE PIXELS, WE'D FILL SCREEN MEMORY" 1780 PRINT"WITH 0001 0110='WHITE' & 'BLUE'='22'" 1785 PRINT"V=53248:POKEV+17,PEEK(V+17)OR32" 1790 PRINT"FORI=0TO999:POKE1024+I,22:NEXT " 1800 PRINT"LET'S TRY IT!":GOSUB63000 1810 V=53248:POKEV+17,PEEK(V+17)OR32 1820 FORI=0TO999:POKE1024+I,22:NEXT:POKEV+17,27:PRINT"[147]" 1830 MS$="GORGEOUS!":GOSUB63100 1840 PRINT"[147]YOU DID[146] SEE SOME OF THE 'CHARACTERS'" 1850 PRINT"IN CHARACTER MEMORY[146], RIGHT?" 1860 PRINT"LET'S LOOK AT ANOTHER PART OF MEMORY." 1870 PRINT"WE'LL CHANGE CHARACTER MEMORY[146] BASE" 1880 PRINT"TO SOMEPLACE OTHER THAN 55296[146] WITH" 1890 PRINT"POKEV+24,(PEEK(V+24)AND240) OR X" 1900 PRINT"WHERE X[146] IS 3,5,7,9,11,13 OR 15":GOSUB63000 1910 PRINT"[147]WHEN WE RETURN FROM THIS ABNORMAL" 1911 PRINT"SCREEN DISPLAY WE'LL HAVE A" 1912 PRINT"WIERD 'CHARACTER SET'!!" 1913 PRINT"I'LL PRINT THE ALPHABET SO YOU" 1914 PRINT"CAN SEE JUST HOW WEIRD!" 1915 MS$=" READY[146]?":GOSUB63100:GOSUB63000:PRINT"[147]":X=9:NN=1 1920 V=53248:POKEV+17,PEEK(V+17)OR32 1930 POKEV+24,17+X:NN=NN+1:IFNN>6THEN1950 1940 FORT=1TO500:NEXT:X=9-X:GOTO1930 1950 POKEV+17,27:MS$="NICE!NICE!":GOSUB63100:GOSUB63100:PRINT"" 1960 AL$="ABCDEFGHIJKLMNOPQRSTUVWXYZ":FORI=1TO26:PRINTMID$(AL$,I,1); 1970 FORT=1TO200:NEXT:NEXT:POKEV+24,21:GOSUB63100 1990 PRINT"[147]LET'S DO THAT AGAIN BUT ALSO CHANGE" 2000 PRINT"SCREEN MEMORY[146] WHICH" 2010 PRINT"GIVES THE COLOURS!" 2020 PRINT"WE'LL:" 2030 PRINT"POKEV+24,X" 2040 PRINT"WHERE X=256*RND(1)":MS$=" READY?[146]":GOSUB63100 2050 GOSUB63000:V=53248:FORI=1TO20:X=256*RND(1):POKEV+24,X:FORT=1TO200:NEXT:NEXT 2060 A$="[147]RANDOM SCREEN MEMORY[146]!"+CHR$(13) 2070 A$=A$+"AND RANDOM CHARACTER MEMORY[146]!" 2080 FORI=1TOLEN(A$):PRINTMID$(A$,I,1);:FORT=1TO50:NEXT:NEXT 2090 MS$=" SLICK":GOSUB63100:POKEV+24,21:GOSUB63000 2100 PRINT"[147]BUT WE OBVIOUSLY WEREN'T IN " 2105 PRINT"BIT MAP MODE[146], SINCE ONLY THE" 2106 PRINT"'PRINTED CHARACTERS' WERE AFFECTED." 2107 PRINT"(THEY CHANGED 'SHAPE' AND 'COLOUR')" 2110 PRINT"SO WE'LL DO IT AGAIN" 2120 PRINT"WITH BMM[146]=1" 2130 PRINT"V=53248:POKEV+17,PEEK(V+17)OR32 " 2140 PRINT"FORI=0TO20:POKEV+24,256*RND(1):NEXT" 2150 MS$=" READY[146]?":GOSUB63100:GOSUB63000 2160 V=53248:POKEV+17,PEEK(V+17)OR32 2170 FORI=0TO20:POKEV+24,256*RND(1):FORT=1TO200:NEXT:NEXT:PRINT"[147]" 2180 MS$="MAMMA MIA!":GOSUB63100:POKE53265,27:POKE53272,21:GOSUB63100:GOSUB63000 2190 PRINT"[147]" 2200 FORI=7TO15:FORJ=0TO39:SS=40*I+J:POKE1024+SS,I-6:POKE55296+SS,0:NEXT:NEXT 2210 PRINT"****************************************" 2220 PRINT"YOU THINK THESE ARE A,B,C, ETC.?" 2230 PRINT"WRONG[146]! THEY'RE COLOURS!" 2240 PRINT"WEPOKE 1,2,3.. TO SCREEN MEMORY" 2250 PRINT"AND GET (NORMALLY) A,B,C,.." 2260 PRINT"BUT 1,2,3..IN SCREEN MEMORY[146] DEFINE" 2265 PRINT"COLOURS WHEN IN BIT MAP MODE[146]!!!":MS$="HIT A KEY":GOSUB63100 2270 GETA$:IFA$=""THEN2270 2275 V=53248:POKEV+17,PEEK(V+17)OR32 2280 GETA$:IFA$=""THEN2280 2290 POKEV+17,27:MS$="!!!SEE????":GOSUB63100 2300 PRINT"[147]NOW LET'S TRY M[146]ULTI C[146]OLOUR M[146]ODE." 2310 PRINT"WE'LL SET BMM[146]=0 (NO BIT MAP)" 2320 PRINT"AND MCM[146]=1 (MULTI COLOUR).":GOSUB63000 2330 PRINT"[147]";:GOSUB7001:A$=BMM$:B$="0":GOSUB7100:A$=MCM$:B$="1":GOSUB7100 2340 GOSUB7609:MS$="GO!GO!GO!":GOSUB63000 2350 PRINT"[147]IN MULTI COLOUR MODE[146] WE GET 'NORMAL'" 2360 PRINT"CHARACTERS FROM CHARACTER MEMORY" 2370 PRINT"(A '1' IN SCREEN MEMORY GIVES THE" 2380 PRINT"PIXEL PATTERN FOR AN 'A')" 2390 PRINT"BUT[157][157][157][184][184][184][145]..THE BIT PAIRS[157][157][157][157][157][184][184][184][184][184][145] 00,01,10,11" 2400 PRINT"EACH PRODUCE DIFFERENT COLOURED" 2410 PRINT"PIXEL PAIRS[157][157][157][157][157][184][184][184][184][184][145].":MS$="PEARS....?":GOSUB63100:GOSUB63000 2420 PRINT"[147]THE 'PIXEL PATTERN' FOR AN 'A' IS:":A$="PAIRS" 2430 PRINT"00011000" 2440 PRINT"00100100" 2450 PRINT"01000100" 2460 PRINT"01111100" 2470 PRINT"01000100" 2480 PRINT"01000100" 2490 PRINT"01000100" 2500 PRINT"00000000" 2510 PRINT"AND, TAKEN IN PEARS";:FORT=1TO1000:NEXT:FORI=1TO5:PRINT"[157] [157]";: 2520 FORT=1TO500:NEXT:NEXT:FORI=1TO5:PRINTMID$(A$,I,1);:FORT=1TO500:NEXT:NEXT 2530 PRINT"00[146]0110[146]00" 2540 PRINT"0010[146]0100" 2550 PRINT"01[146]0001[146]00" 2560 PRINT"0111[146]1100" 2570 PRINT"01[146]0001[146]00" 2580 PRINT"0100[146]0100" 2590 PRINT"01[146]0001[146]00" 2600 PRINT"0000[146]0000" 2610 PRINT"AND 00[146]=COLOUR #0":PRINT" 01[146]=COLOUR #1" 2620 PRINT" 10[146]=COLOUR #2":PRINT" 11[146]=COLOUR #3":GOSUB63000 2630 MS$=" V+??[146][146]":GOSUB63100:GOSUB63000:PRINT"[147]";:GOSUB7005:GOSUB63000 2635 PRINT"COLOUR #0[146] REGISTER" 2636 PRINT"COLOUR #1[146] REGISTER" 2637 PRINT"COLOUR #2[146] REGISTER" 2640 PRINTDN$"WE WANT 00[146] PATTERN = RED (2)":GOSUB63000 2650 A$=BMM$:B$="[157][157][157][157][214][214][214][214]0010":GOSUB7100 2660 PRINTDN$"WE WANT 01[146] PATTERN = WHITE (1)":GOSUB63000 2670 A$=MCM$:B$="[157][157][157][157][157][157][214][214][214][214]0001":GOSUB7100 2680 PRINTDN$"WE WANT 10[146] PATTERN = LIGHT BLUE (14)":GOSUB63000 2690 A$=CMB$:B$="[157][157][157][157][157][157][157][157][214][214][214][214]1110":GOSUB7100 2700 PRINTDN$"AND 11[146]...??":GOSUB63000 2710 PRINTDN$"AT SCREEEN LOC'N 1025 WE WANT 'GREY 1'":GOSUB63000 2720 PRINTDN$"..AND 'GREY 1' IS COLOUR '12'...":GOSUB63000 2730 PRINTDN$"..SO WE PUT '12' INTO COLOUR MEMORY..":GOSUB63000 2740 PRINTDN$"AND 1025=1024+1[146], SO...":GOSUB63000 2750 PRINTDN$"WE PUT '12' INTO 55296+1[146]!":GOSUB63000 2760 A$=SC$:B$="00000001":GOSUB7100:PRINTDN$"HERE'S OUR 'A'":GOSUB63000 2765 A$=CH$+"[145][145][145][157][157][157][192]>":B$="1100":GOSUB7100 2770 PRINTDN$"AND HERE'S OUR 'GREY 1'..":GOSUB63000 2771 PRINT"[147]WAIT[157][157][157][157][184][184][184][184][145]!!!" 2772 PRINT"REMEMBER[146]: IN MULTI COLOUR MODE" 2773 PRINT"BITS 0,1,2 OF A COLOUR MEMORY" 2774 PRINT"NYBBLE GIVE ONE OF EIGHT[146] COLOURS" 2775 PRINT"FOR THE '11' BIT PATTERN, BUT[157][157][157][184][184][184]" 2776 PRINT"BIT 3 SAYS WHETHER THAT PARTICULAR" 2778 PRINT"SCREEN POSITION IS[157][157][184][184][145] IN[146] MULTI-COLOUR":PRINT"MODE!!":GOSUB63000 2780 PRINT"[147]WITH THE SETUP SHOWN, A '1' IN" 2790 PRINT"SCREEN MEMORY[146] LOCATION 1025 WOULD" 2800 PRINT"YIELD A MULTI-COLOURED 'A' ON THE" 2810 PRINT"SCREEN..IN RED, WHITE, BLUE AND PURPLE[146]!" 2815 PRINT"('12'=8+4:8='MULTI';4='PURPLE')." 2820 PRINT"SINCE V+33,V+34 AND V+35 ARE 'SHARED'," 2830 PRINT"ALL[157][157][157][184][184][184][145] CHARACTERS WOULD SHARE" 2840 PRINT"THE RED, WHITE AND BLUE...BUT THE" 2850 PRINT"PURPLE COULD CHANGE FROM ONE SCREEN" 2860 PRINT"POSITION TO ANOTHER.":MS$="4=PURPLE!":GOSUB63100:GOSUB63000 2870 MS$="LET'S TRY!":GOSUB63100:GOSUB63000:PRINT"[147]":POKE53281,15 2875 V=53248:POKEV+17,27:POKEV+34,0:POKEV+35,0:POKEV+22,200:MS$=" DONE" 2880 A$="LET'S PUT AN 'A' INTO THE BOX:":GOSUB7500 2890 PRINT"POKE 1024+42,1[146] :REM '1' IS 'A'" 2900 PRINT" [176][192][174][157][157][157][221] [221][157][157][157][173][192][189]":GOSUB63000:POKE1024+42,1:GOSUB63100 2910 A$="LET'S MAKE IT A 'GREY 1-A':":GOSUB7500 2920 PRINT"POKE55296+42,12[146]:REM '12' IS 'GREY 1'":GOSUB63000:POKE55296+42,12 2925 GOSUB63100 2930 A$="TURN ON MULTI-COLOUR:":GOSUB7500 2940 PRINT"POKEV+22,PEEK(V+22)OR16[146]:MCM=1":GOSUB63000 2950 V=53248:POKEV+22,PEEK(V+22)OR16:GOSUB63100 2955 A$="CHANGES THINGS DOESN'T IT?!?":GOSUB7500:GOSUB63000 2960 A$="CHOOSE WHITE FOR COLOUR #2":GOSUB7500 2970 PRINT"POKEV+35,1[146]:WHITE IS '1'":GOSUB63000:POKEV+35,1:GOSUB63100 2980 A$="CHOOSE GREEN FOR COLOUR #1":GOSUB7500 2990 PRINT"POKEV+34,5[146]:GREEN IS '5'":GOSUB63000:POKEV+34,5:GOSUB63100 3000 A$="CHOOSE YELLOW FOR COLOUR #0":GOSUB7500 3010 PRINT"POKEV+33,7[146]:YELLOW IS '7'":GOSUB63000:POKEV+33,7:GOSUB63100 3020 GOSUB63000:POKEV+17,27:POKEV+33,1:POKEV+22,200 3030 PRINT"[147]AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; 3040 PRINT"****************************************"; 3050 PRINT"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; 3060 PRINT"****************************************":MS$=" DONE" 3070 PRINT"SINCE WE CAN HAVE MULTI COLOUR[146]" 3080 PRINT"IN SOME PLACES AND NOT IN OTHERS....":GOSUB63000 3085 V=53248:POKEV+22,PEEK(V+22)OR16:POKEV+34,0:POKEV+35,3 3090 A$="FORI=0TO79:POKE55296+I,4:NEXT[146]:PURPLE":GOSUB7500:GOSUB63000 3100 FORI=0TO79:POKE55296+I,4:NEXT:GOSUB63100 3110 A$="FORI=80TO159:POKE55296+I,12:NEXT[146]:+MULTI":GOSUB7500:GOSUB63000 3120 FORI=80TO159:POKE55296+I,8+4:NEXT:GOSUB63100 3130 A$="FORI=80TO159:POKE55296+I,8:NEXT[146]":GOSUB7500:GOSUB63000 3140 FORI=80TO159:POKE55296+I,8:NEXT:GOSUB63100 3150 A$="FORI=80TO159:POKE55296+I,9:NEXT[146]":GOSUB7500:GOSUB63000 3160 FORI=80TO159:POKE55296+I,9:NEXT:GOSUB63100 3170 A$="FORI=80TO159:POKE55296+I,15:NEXT[146]":GOSUB7500:GOSUB63000 3180 FORI=80TO159:POKE55296+I,15:NEXT:GOSUB63100:GOSUB63000:MS$="NOW......" 3190 GOSUB63100:GOSUB63000:MS$=" MCM=0[146]":GOSUB63100:GOSUB63000 3195 POKEV+22,200:MS$=" GREY 3":GOSUB63100 3200 PRINT"[147]NOW YOU TRY PLAYING WITH MULTI COLOUR[146].":MS$="PLAY!PLAY!" 3210 GOSUB63100:GOSUB63000 4000 A$(1)="0123456789ABCDEF " 4010 A$(2)="!#$%&'()[219]-\:;<>/ " 4020 A$(3)="[209][215][171][179][177][178][213][201][202][203][255][193][211][218][216][181] " 4030 A$(4)="[206][206][206][206][206][206][206][206][206][206][206][206][206][206][206][206] " 4040 A$(5)="[205][205][205][205][205][205][205][205][205][205][205][205][205][205][205][205] " 4050 A$(6)="[181][181][181][181][181][181][181][181][181][181][181][181][181][181][181][181] " 4060 A$(7)="**************** " 4070 D$="" 4080 PRINT"[147]";:FORI=1TO7:PRINTA$(I)A$(I):NEXT:PRINT" MULTI NORMAL" 4085 PRINTD$"ENTER -1[146] TO QUIT" 4086 PRINT"(ENTER COLOUR NUMBERS 0-7)" 4090 V=53248:POKEV+22,216:REM MULTI 4100 INPUT"11[146]-COLOUR";C3 4105 IFC3<0THEN4200 4106 PRINT" [157][157][157][157][157][157][157][157][157][157][157]"C$(C3) 4110 INPUT"10[146]-COLOUR";C2 4115 IFC2<0THEN4200 4116 PRINT" [157][157][157][157][157][157][157][157][157][157][157]"C$(C2) 4120 INPUT"01[146]-COLOUR";C1 4125 IFC1<0THEN4200 4126 PRINT" [157][157][157][157][157][157][157][157][157][157][157]"C$(C1) 4130 POKEV+34,C1AND15:POKEV+35,C2AND15 4140 FORI=0TO6:FORJ=0TO35 4150 POKE55296+40*I+J,(C3-8*(J<16))AND15 4160 NEXT:NEXT:GOTO4090 4200 POKEV+22,200:GOSUB60000:PRINT"[147][144]IN MULTI COLOUR MODE[146] (MCM=1 IN V+22)" 4205 PRINT"THE RESOLUTION IS LESS THAN IN STANDARD" 4210 PRINT"MODE...BUT IT DOES[157][157][157][157][184][184][184][184][145] GIVE MORE COLOURS!" 4215 PRINT"SUPPOSE YOU WANTED 'NORMAL' CHARACTERS" 4220 PRINT"BUT WITH A CHOICE OF COLOURS FOR" 4225 PRINT"PIXELS ON[146] AND PIXELS OFF[146]." 4230 PRINT"(FOR 'CHARACTER' AND 'BACKGROUND')." 4240 PRINT"THEN USE EXTENDED COLOUR MODE[146]!!":MS$="SET ECM=1?":GOSUB63100 4245 GOSUB63000:PRINT"[147]":MS$="LET'S TRY":GOSUB63100 4250 V=53248:POKEV+17,91:POKE1024,1 4260 : 4290 PRINT"[147]":FORI=0TO15:I$=RIGHT$(" "+STR$(I),2) 4300 PRINTI$"="C$(I):NEXT:PRINT:PRINTC$(I) 4310 POKE1066,1+64 4320 INPUT"COLOUR OF CHARACTER";CC:IFCC<0THENPOKEV+17,27:GOTO4400 4330 POKE55338,CC 4340 INPUT"BACKGROUND COLOUR ";BK:IFBK<0THENPOKEV+17,27:GOTO4400 4350 POKEV+34,BK 4360 GOTO4320 4400 PRINT"[147]";:GOSUB7003 4410 PRINTDN$"WE SET BMM[146]=0 (NO BIT MAP)":GOSUB63000 4420 A$=BMM$:B$="0":GOSUB7100 4430 PRINTDN$"WE SET MCM[146]=0 (NO MULTI COLOUR)":GOSUB63000 4440 A$=MCM$:B$="0":GOSUB7100 4450 PRINTDN$"AND NOW SET ECM[146]=1 (!!!)":GOSUB63000 4460 A$=BMM$:B$="[157][157]1":GOSUB7100:GOSUB7612:GOSUB63000 4470 PRINTDN$"NOW[146],WE POKE 1025 WITH SOMETHING..":GOSUB63000 4475 A$=SC$:B$="01101101":GOSUB7100 4480 PRINTDN$"WHAT GOES ON THE SCREEN??":GOSUB63000 4490 PRINTDN$"1[146]:GET NUMBER IN SCREEN MEMORY(1025)":GOSUB63000 4500 PRINTDN$"LOOK AT BOTTOM 6 BITS!!":GOSUB63000:B0$=B$ 4510 A$=SC$:PRINTA$B0$:B$=""+RIGHT$(B0$,11):GOSUB7100 4520 PRINTDN$"THESE GIVE '45'...":GOSUB63000 4530 PRINTDN$"2[146]:GET 'PIXEL PATTERN #45'":GOSUB63000 4540 PRINTDN$"FROM CHARACTER MEMORY[146]..8 BYTES":GOSUB63000 4550 PRINTDN$"(HAPPENS TO BE +[146])":GOSUB63000 4560 PRINTDN$"3[146]:PUT A +[146] ON THE SCREEN AT 1025":GOSUB63000 4570 PRINTDN$"4[146]:USE THE COLOUR NYBBLE AT 55296+1[146]" 4580 A$=CH$+"[145][145][145][157][157][157][192]>":B$="0101":GOSUB7100:GOSUB63000 4590 PRINTDN$"THIS DETERMINES THE ON[146] PIXELS!":GOSUB63000 4595 PRINTDN$"(HAPPENS TO BE 'GREEN')":GOSUB63000 4600 PRINTDN$"..AND, FOR THE BACKGROUND???":GOSUB63000 4610 PRINTDN$"5[146]:STRIP OFF THE TOP 2 BITS" 4620 A$=SC$:B$=LEFT$(B0$,4)+"[146]"+RIGHT$(B0$,11):GOSUB7100:GOSUB63000 4630 PRINTDN$"THESE GIVE 00,01,10 OR 11":GOSUB63000 4640 PRINTDN$"OR..N=0,1,2 OR 3 (DECIMAL)":GOSUB63000 4650 PRINTDN$"5[146]:USE AS BACKGROUND COLOUR....":GOSUB63000 4660 PRINTDN$"THE COLOUR IN THE COLOUR REGISTER":GOSUB63000 4670 PRINTDN$"V+33+N[146]!!!":GOSUB63000 4675 PRINT"[147]"; 4676 A$="V+33 COLOUR #0" 4677 B$="V+34 COLOUR #1" 4678 C$="V+35 COLOUR #2" 4679 D$="V+36 COLOUR #3" 4680 PRINTNN$(1):PRINTNN$(2)A$:PRINTNN$(3) 4690 PRINTNN$(1):PRINTNN$(2)B$:PRINTNN$(3) 4700 PRINTNN$(1):PRINTNN$(2)C$:PRINTNN$(3) 4710 PRINTNN$(1):PRINTNN$(2)D$:PRINTNN$(3) 4720 MS$="4 COLOURS":GOSUB63100:GOSUB63000 4730 PRINT"[147]NOTE THAT ONLY 6 BITS[146] OF THE NUMBER" 4740 PRINT"IN SCREEN MEMORY ARE USED TO DEFINE" 4750 PRINT"A 'CHARACTER'. SINCE 2^6=64 THEN ONLY" 4760 PRINT"64 CHARACTERS[146] ARE AVAILABLE IN" 4770 PRINT"EXTENDED COLOUR MODE[146]" 4780 PRINT"INCLUDING 'A'-'Z' AND '0'-'9'" 4790 PRINT"AND SOME OTHERS.":MS$=" WATCH":GOSUB63100:GOSUB63000:PRINT"[147]" 4800 FORI=0TO255:POKE1024+I,I:POKE55296+I,0:NEXT:V=53248:POKEV+17,91 4810 PRINT"MOST GRAPHICS GONE!!!!":GOSUB63100:GOSUB63000:POKEV+17,27 4820 POKEV+17,91:FORT=1TO500:NEXT:POKEV+17,27 4840 FORT=1TO500:NEXT:POKEV+17,27 4845 GETA$:IFA$=""THEN4820 4850 MS$=" GONE":GOSUB63100:GOSUB63000 4860 PRINT"[147]";:FORI=0TO7:PRINTA$(I):NEXT:X=0 4870 PRINT"SET ECM[146]="X:POKEV+17,27-64*(X=1) 4880 FORT=1TO500:NEXT:X=1-X 4890 GETA$:IFA$=""THEN4870 4900 POKEV+17,27 5000 PRINT"[147]USE EXTENDED COLOUR MODE" 5010 PRINT"FOR ALPHANUMERIC DISPLAYS IN" 5020 PRINT"MULTI-COLOUR." 5030 PRINT"USE MULTI-COLOUR MODE[146] FOR ...":GOSUB63000:MS$=" SPRITES![146]" 5040 GOSUB63100:GOSUB63000 6999 MS$="AU REVOIR!":PRINT"[147]":GOSUB63100:PRINT"":END 7000 REM REGISTERS ETC. 7001 A$="V+17":B$="V+22":C$="V+24":D$="SCREEN MEMORY":E$="CHARACTER MEMORY" 7002 GOSUB7010:RETURN 7003 A$="V+17":B$="V+22":C$="V+24":D$="SCREEN MEMORY":E$="COLOUR MEMORY " 7004 GOSUB7300:RETURN 7005 A$="V+33":B$="V+34":C$="V+35":D$="SCREEN MEMORY":E$="COLOUR MEMORY " 7006 GOSUB7300:RETURN 7010 PRINTNN$(1):PRINTNN$(2)A$:PRINTNN$(3) 7020 PRINTNN$(1):PRINTNN$(2)B$:PRINTNN$(3) 7030 PRINTNN$(1):PRINTNN$(2)C$:PRINTNN$(3) 7040 PRINTL$,L$:PRINTNN$(1),NN$(1):PRINTNN$(2),NN$(2):PRINTNN$(3),NN$(3) 7050 PRINTNN$(1),NN$(1):PRINTNN$(2),NN$(2):PRINTNN$(3),NN$(3) 7060 PRINTNN$(1),NN$(1):PRINTNN$(2),NN$(2):PRINTNN$(3),NN$(3) 7070 PRINT" ^"D$,"^"E$ 7080 RETURN 7100 REM BITS DISPLAY 7110 FORII=1TO5:PRINTA$B$:FORTT=1TO100:NEXT:PRINTA$""B$:FORTT=1TO100:NEXT 7120 NEXT:RETURN 7200 REM BIT MAP MODE 7210 V=53248:POKEV+17,PEEK(V+17)OR32 7220 GETA$:IFA$<>""THEN7220 7230 GETA$:IFA$=""THEN7230 7240 POKEV+17,27:RETURN 7300 REM REGISTERS ETC. 7310 PRINTNN$(1):PRINTNN$(2)A$:PRINTNN$(3) 7320 PRINTNN$(1):PRINTNN$(2)B$:PRINTNN$(3) 7330 PRINTNN$(1):PRINTNN$(2)C$:PRINTNN$(3) 7340 PRINTL$,L$:PRINTNN$(1),N$(1):PRINTNN$(2),N$(2):PRINTNN$(3),N$(3) 7350 PRINTNN$(1),N$(1):PRINTNN$(2),N$(2):PRINTNN$(3),N$(3) 7360 PRINTNN$(1),N$(1):PRINTNN$(2),N$(2):PRINTNN$(3),N$(3) 7370 PRINT" ^"D$,"^"E$ 7380 RETURN 7500 REM SLOW PRINT 7510 PRINTDD$;:FORI=1TOLEN(A$):PRINTMID$(A$,I,1);:FORT=1TO10:NEXT:NEXT 7520 PRINT:RETURN 7600 A$="_MAGIC REGISTERS" 7601 B$="_ IN THE " 7602 C$="_ VIDEO CHIP ":GOSUB7620:RETURN 7603 A$=" [176][192][192][192][192][192][192][192][192][192][192][192][192][174] " 7604 B$=" [221]NORMAL MODE[221] " 7605 C$=" [173][192][192][192][192][192][192][192][192][192][192][192][192][189] ":GOSUB7630:RETURN 7606 A$=" [176][192][192][192][192][192][192][192][192][192][192][192][192][174] " 7607 B$=" [221]BIT MAP MODE[221] " 7608 C$=" [173][192][192][192][192][192][192][192][192][192][192][192][192][189] ":GOSUB7630:RETURN 7609 A$=" [176][192][192][192][192][192][192][192][192][192][192][192][192][174] " 7610 B$=" [221]MULTI-COLOUR[221] " 7611 C$=" [173][192][192][192][192][192][192][192][192][192][192][192][192][189] ":GOSUB7630:RETURN 7612 A$=" [176][192][192][192][192][192][192][192][192][192][192][192][192][174] " 7613 B$=" [221]EXT.COL.MODE[221] " 7614 C$=" [173][192][192][192][192][192][192][192][192][192][192][192][192][189] ":GOSUB7630:RETURN 7620 PRINTPS$A$:PRINTPS$""B$:PRINTPS$""C$:RETURN 7630 PRINTPS$A$:PRINTPS$""B$:PRINTPS$""C$:RETURN 60000 REM INITIALIZE 60001 BT$="":FORI=1TO24:BT$=BT$+"":NEXT:PRINTCHR$(142) 60002 PT$="[176][192][192][192][192][192][192][192][192][192][192][174][157][157][157][157][157][157][157][157][157][157][157][157][221][221][157][157][157][157][157][157][157][157][157][157][157][157][173][178][192][192][192][192][192][192][192][192][178][189]" 60003 PT$=PT$+"[157][157][157][157][157][157][157][157][157][157][157][157][157][206][163][163][163][163][163][163][163][163][163][163][163][163][205][157][157][157][157][157][157][157][157][157][157][157][157][157][157][165]============[144][167]" 60004 PT$=PT$+"[157][157][157][157][157][157][157][157][157][157][157][157][157][157][208][207][163][163][163][163][163][163][163][163][163][163][208][207][145][145][145][145][157][157][157][157][157][157][157][157][157][157][157][157]" 60005 PT$=BT$+"[145][145][145][145][145][145]"+PT$ 60007 ML$="" 60008 WD=40:CRT=1024 60009 W2=WD/2:W3=WD-1:W1$=MID$(STR$(WD),2):POKE53281,15:POKE53280,12:PRINT"[144]" 60010 V=53248:FORI=0TO16:POKEV+I,0:NEXT:POKEV+22,200 60011 POKEV+23,0:POKEV+29,0:FORI=0TO7:POKEV+39+I,0:NEXT:POKEV+17,27:POKEV+24,21 60012 N$(1)="[176][192][178][192][178][192][178][192][174]" 60013 N$(2)="[221] [221] [221] [221] [221]" 60014 N$(3)="[173][192][177][192][177][192][177][192][189]" 60015 NN$(1)="[176][192][178][192][178][192][178][192][178][192][178][192][178][192][178][192][174]" 60016 NN$(2)="[221] [221] [221] [221] [221] [221] [221] [221] [221]" 60017 NN$(3)="[173][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][189]" 60020 R$="[176][178][178][178][178][178][178][178][174][157][157][157][157][157][157][157][157][157][173][177][177][177][177][177][177][177][189][145]" 60030 L$="- - - - - - - - -" 60040 PS$="" 60050 DN$="" 60060 BMM$="":MCM$="":SMB$="" 60070 CMB$=SMB$+"":CL$=" " 60080 DN$=DN$+CL$+DN$ 60090 SC$=SMB$+"" 60100 CH$=SC$+"" 60110 DD$="":DD$=DD$+CL$+DD$ 60115 IF D9=0 THEN DIM C$(16):FORI=0TO16:READC$(I):NEXT 60116 DATABLACK,WHITE,RED,CYAN,PURPLE,GREEN,BLUE,YELLOW 60117 DATAORANGE,BROWN,LIGHT RED,GRAY 1,GRAY 2,LIGHT GREEN,LIGHT BLUE,GRAY 3 60118 DATA ENTER NEGATIVE NUMBER TO QUIT 60200 D9=1:RETURN 62000 GOSUB63000 62001 PRINTSD$CL$:PRINTCL$:PRINTCL$ 62003 RETURN 63000 PRINT"[144]HIT RETURN[146] TO CONTINUE"; 63001 GETA$:IFA$<>""THEN63001 63002 GETA$:IFA$=""THEN63002 63003 RETURN 63100 FORT=1TO5:PRINTPT$MS$; 63101 PRINTPT$" "; 63102 PRINTPT$MS$;:NEXT 63103 PRINT"[144]":RETURN 63900 SD$="":CL$="[146] [146]" 63901 SR$="" 63902 RETURN